博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于微信小程序swiper的问题
阅读量:6720 次
发布时间:2019-06-25

本文共 3051 字,大约阅读时间需要 10 分钟。

关于小程序swiper的问题

代码

在官方示例上给swiper添加了current``bindchange``circular

添加了一个button``bindtap用于切换下一张

index.wxml

interval
duration复制代码

index.js

/**     * create by ZenoTian     */Page({  data: {    imgUrls: [      'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg',      'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg',      'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg'    ],    indicatorDots: false,    autoplay: false,    interval: 5000,    duration: 1000,    index: 2  },  changeIndicatorDots: function(e) {    this.setData({      indicatorDots: !this.data.indicatorDots    })  },  nextSwiper: function (e) {    let {index} = this.data    index === 2    ?index = 0    :index++    console.log(`下一张:${index}`)        this.setData({            index        })  },  changeAutoplay: function(e) {    this.setData({      autoplay: !this.data.autoplay    })  },  intervalChange: function(e) {    this.setData({      interval: e.detail.value    })  },  durationChange: function(e) {    this.setData({      duration: e.detail.value    })  },  swiperChange: function (e) {    console.log('bindchange事件', `this.data.index:${
this.data.index} e.detail.current:${e.detail.current}`) }})复制代码

问题1:手动赋值current值,衔接滑动无效

点击下一张,通过给setData改变swipercurrent值,在从最后一张切换至第一张时,虽然设置了circular,但是不会有衔接滑动的效果,而是从尾部一路溜到了头。

问题2:绑定的current的值,滑动并不会改变

通过给swipercurrent绑定了this.data.index

默认值是生效的,但是在手滑滑块的时候,并不会自动改变this.data.index的值。
通过bindchange的打印可以看出来。this.data.index的值是永远不会变的。
所以这时候currentthis.data.index是不照应的。

例如:向右滑动

bindchange事件 this.data.index:2 e.detail.current:1bindchange事件 this.data.index:2 e.detail.current:0bindchange事件 this.data.index:2 e.detail.current:2bindchange事件 this.data.index:2 e.detail.current:1bindchange事件 this.data.index:2 e.detail.current:0复制代码

在官方文档中

如果在 bindchange 的事件回调函数中使用 setData 改变 current 值,则有可能导致 >setData 被不停地调用,因而通常情况下请不要这样使用

如果想让currentthis.data.index对照,还是需要在bindchange 的事件回调函数中使用setData改变current值。

swiperChange: function (e) {    console.log('bindchange事件',`this.data.index:${
this.data.index} e.detail.current:${e.detail.current}`) this.setData({ index: e.detail.current }) }复制代码

问题3:控制current的值切换,与滑动切换代码结果不一样

如果采取了在bindchange 的事件回调函数中使用setData改变current值。

点击下一张:给this.data.index赋值后触发的bindchange事件回调中的,this.data.indexe.detail.current的值相同。

下一张:0bindchange事件 this.data.index:0 e.detail.current:0下一张:1bindchange事件 this.data.index:1 e.detail.current:1下一张:2bindchange事件 this.data.index:2 e.detail.current:2下一张:0bindchange事件 this.data.index:0 e.detail.current:0下一张:1bindchange事件 this.data.index:1 e.detail.current:1复制代码

手动滑动时:bindchange事件回调中的,this.data.index的值会是上一次的值

bindchange事件 this.data.index:2 e.detail.current:1bindchange事件 this.data.index:1 e.detail.current:0bindchange事件 this.data.index:0 e.detail.current:2bindchange事件 this.data.index:2 e.detail.current:1bindchange事件 this.data.index:1 e.detail.current:0复制代码

转载于:https://juejin.im/post/59c370e2f265da0672284260

你可能感兴趣的文章
浅析libuv源码-node事件轮询解析(2)
查看>>
SpringBoot使用Nacos配置中心
查看>>
CentOS6.x下自动安装本地和网络YUM源
查看>>
mysql基础知识之增删查改使用介绍
查看>>
C++11 提升Vector效能的技巧
查看>>
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
查看>>
docker使用指南
查看>>
如何让对方发给你需要的文件格式?
查看>>
php学习笔记--运算符号
查看>>
IPv6已分配地址中国仅占0.29%
查看>>
解决Lync2010和Lync2013转接电话断开的问题
查看>>
find grep wc awk sed sort uniq split指令详解
查看>>
高并发中的卡死状态 -HashMap
查看>>
http上传文件深度解析-高性能http传输
查看>>
Linux下配置Java环境变量
查看>>
HTTP State Management Mechanism(HTTP 状态管理机制)
查看>>
IOS之禁用UIWebView的默认交互行为
查看>>
绩效管理功能扩展包
查看>>
我的友情链接
查看>>
Android:NDK、JNI
查看>>